﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UA.Web.Annotations
{
    /// <summary>
    /// 表示 页面功能模块/Controller/Action 细粒度 权限操作的权限 类型/编码 定义；
    /// 该属性类型用于标记至 ASP.NET MVC 的 Controller 或 Action 中，当在 Controller/Action 上标记该属性类型时，只需且仅可指定该类型的 Key/Code 其中之一属性。
    /// 该属性类型会在 ModuleAuthorizeAttribute 过滤器中被校验；
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
    public class ModuleAttribute : Attribute
    {
        /// <summary>
        /// 以指定的 <see cref="Guid"/> 值作为 Key 属性初始化类型 <see cref="ModuleAttribute"/> 的新实例。
        /// </summary>
        /// <param name="powerKey">作为 Key 属性的 <see cref="Guid"/> 值。</param>
        public ModuleAttribute(Guid powerKey)
        {
            this.Key = powerKey;
        }

        /// <summary>
        /// 以指定的 <see cref="String"/> 值作为 Code 属性初始化类型 <see cref="ModuleAttribute"/> 的新实例。
        /// </summary>
        /// <param name="powerCode">作为 Code 属性的 <see cref="String"/> 值。</param>
        public ModuleAttribute(string powerCode)
        {
            this.Code = powerCode;
        }



        /// <summary>
        /// 表示 页面功能模块/Controller/Action 细粒度 权限操作的权限定义 Key 值（同 <see cref="UA.Data.Model.Power"/> 中的 Key 属性）。
        /// </summary>
        public Guid? Key { get; set; }

        /// <summary>
        /// 表示 页面功能模块/Controller/Action 细粒度 权限操作的权限定义 Code 值（同 <see cref="UA.Data.Model.Power"/> 中的 Code 属性）。
        /// </summary>
        public string Code { get; set; }






    }
}
